package br.com.skytef.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import br.com.skytef.entity.RelCardPedEntity;
import br.com.skytef.entity.RelatorioEntradaClientesEntity;
import br.com.skytef.jdbc.ConnectionFactory;
import br.com.skytef.utils.utils;


public class CardPedDao {
	private static String erro;
	public Connection connection;

	public CardPedDao(){
		this.connection = new ConnectionFactory().getConnection();
	}

	public CardPedDao(HttpSession session){
		this.connection = utils.recoverSessionDBConnection(session);
	}

	public CardPedDao(Connection con){
		this.connection = con;
	}

	public Connection getConnection(){
		return connection;
	}


	public List<RelCardPedEntity> PedidosCartoes(int idCard, Date dataIni, Date dataFim) throws SQLException{

		List<RelCardPedEntity> relatorios = null;
		RelCardPedEntity relatorio;

		Connection connection = new ConnectionFactory().getConnection();
		try {

			PreparedStatement stmt = connection.prepareStatement(this.getQryCartaoPedido(dataIni,dataFim));
			stmt.setInt(1, idCard);
			ResultSet rs = stmt.executeQuery();

			if (rs.next()) {
				relatorios = new ArrayList<RelCardPedEntity>();
				do {

					relatorio = new RelCardPedEntity();

					relatorio.setIdPedido(rs.getInt("Pedidos_IdPedido"));
					relatorio.setIdPedido(rs.getInt("Produtos_idProduto"));
					relatorio.setHora(rs.getTime("Hora"));
					relatorio.setObs(rs.getString("Obs"));
					relatorio.setStatusPedido(rs.getBoolean("StatusPedido"));
					relatorio.setDataFechamento(rs.getDate("DataFechamento"));
					relatorio.setHoraPedido(rs.getTime("HoraFechamento"));
					relatorio.setNumCard(rs.getInt("fk_cartao"));
					relatorio.setDataPedido(rs.getDate("DataCriacao"));
					relatorio.setHoraPedido(rs.getTime("HoraCriacao"));
					relatorio.setValorCredito(rs.getDouble("valorCredito"));

					relatorios.add(relatorio);
				} while (rs.next());
			}
			connection.close();
		} catch (SQLException e) {
			connection.close();
			System.out.println("SQL erro: " + e);
		} catch (Exception e) {
			connection.close();
			System.out.println("Geral erro: " + e);
		}
		return relatorios;
	}





	public List<RelCardPedEntity> Pedidos(int idPedido) throws SQLException{

		List<RelCardPedEntity> relatorios = null;
		RelCardPedEntity relatorio;

		Connection connection = new ConnectionFactory().getConnection();
		try {

			PreparedStatement stmt = connection.prepareStatement(this.getQryPedido());
			stmt.setInt(1, idPedido);
			ResultSet rs = stmt.executeQuery();

			if (rs.next()) {
				relatorios = new ArrayList<RelCardPedEntity>();
				do {

					relatorio = new RelCardPedEntity();

					relatorio.setIdPedido(rs.getInt("Pedidos_IdPedido"));
					relatorio.setIdPedido(rs.getInt("Produtos_idProduto"));
					relatorio.setHora(rs.getTime("Hora"));
					relatorio.setValorUnit(rs.getDouble("ValorUnit"));
					relatorio.setStatusPedido(rs.getBoolean("Quant"));
					relatorio.setDataFechamento(rs.getDate("DataFechamento"));
					relatorio.setHoraPedido(rs.getTime("HoraFechamento"));
					relatorio.setNumCard(rs.getInt("fk_cartao"));
					relatorio.setDataPedido(rs.getDate("DataCriacao"));
					relatorio.setHoraPedido(rs.getTime("HoraCriacao"));
					relatorio.setDescMerc(rs.getString("DescrMercadoria"));
					relatorio.setValorTotal(rs.getDouble("valorTotal"));
					relatorios.add(relatorio);
				} while (rs.next());
			}
			connection.close();
		} catch (SQLException e) {
			connection.close();
			System.out.println("SQL erro: " + e);
		} catch (Exception e) {
			connection.close();
			System.out.println("Geral erro: " + e);
		}
		return relatorios;
	}



	/************
	 * 
	 * QRY
	 */

	private String getQryCartaoPedido(Date dataIni, Date dataFim) {

		StringBuffer sql = new StringBuffer();
		System.out.println(dataIni);
		System.out.println(dataFim);
		sql.append("SELECT ped_produto.Pedidos_IdPedido, ");
		sql.append("              ped_produto.Produtos_idProduto,  ");
		sql.append("       		  ped_produto.Hora,   ");
		sql.append("        	  ped_produto.Cancelado, ");
		sql.append("        	  ped_produto.Obs, ");
		sql.append("        	  ped_padrao.StatusPedido, ");
		sql.append("        	  ped_padrao.DataFechamento, ");
		sql.append("        	  ped_padrao.HoraFechamento, ");
		sql.append("        	  ped_cli.fk_cartao,  ");
		sql.append("        	  ped.DataCriacao, ");
		sql.append("        	  ped.HoraCriacao, ");
		sql.append("        	  ped_padrao.valorCredito ");
		sql.append("FROM   pedidos_has_produtos as ped_produto  ");
		sql.append("       INNER JOIN pedidos_padrao  ped_padrao ");
		sql.append("        	 ON ped_padrao.Pedidos_idPedido = ped_produto.Pedidos_IdPedido ");
		sql.append("       INNER JOIN pedidos_has_clientes as ped_cli ");
		sql.append("        	 ON ped_produto.Pedidos_IdPedido = ped_cli.fk_pedido ");
		sql.append("       INNER JOIN pedidos as ped ");
		sql.append("        	 ON ped.IdPedido = ped_produto.Pedidos_IdPedido  ");
		sql.append("       INNER JOIN clientes  cli  ");
		sql.append("        	 ON cli.idClientes = ped_cli.fk_cliente   ");
		sql.append("WHERE  ped_cli.fk_cartao = ? ");  
		sql.append("			 AND ped.DataCriacao between '" + dataIni + "' and '" + dataFim + "' " );
		sql.append("             GROUP BY ped_produto.Pedidos_IdPedido ; ");

		return sql.toString();
	}

	
	private String getQryPedido() {

		StringBuffer sql = new StringBuffer();
		
		sql.append("SELECT ped_produto.Pedidos_IdPedido, ");
		sql.append("              ped_produto.Produtos_idProduto,  ");
		sql.append("       		  ped_produto.Hora,   ");
		sql.append("       		  ped_produto.ValorUnit,   ");
		sql.append("       		  ped_produto.Quant,   ");
		sql.append("        	  ped_padrao.DataFechamento, ");
		sql.append("        	  ped_padrao.HoraFechamento, ");
		sql.append("        	  ped_cli.fk_cartao,  ");
		sql.append("        	  ped.DataCriacao, ");
		sql.append("        	  ped.HoraCriacao, ");
		sql.append("        	  merc.DescrMercadoria, ");
		sql.append("		( ped_produto.ValorUnit * ped_produto.Quant) as valorTotal ");
		sql.append("FROM   pedidos_has_produtos as ped_produto  ");
		sql.append("       INNER JOIN pedidos_padrao  ped_padrao ");
		sql.append("        	 ON ped_padrao.Pedidos_idPedido = ped_produto.Pedidos_IdPedido ");
		sql.append("       INNER JOIN pedidos_has_clientes as ped_cli ");
		sql.append("        	 ON ped_produto.Pedidos_IdPedido = ped_cli.fk_pedido ");
		sql.append("       INNER JOIN pedidos as ped ");
		sql.append("        	 ON ped.IdPedido = ped_produto.Pedidos_IdPedido  ");
		sql.append("       INNER JOIN mercadorias merc   ");
		sql.append("        	 ON merc.Produtos_idProduto = ped_produto.Produtos_idProduto    ");
		sql.append("       INNER JOIN clientes  cli  ");
		sql.append("        	 ON cli.idClientes = ped_cli.fk_cliente   ");
		sql.append("WHERE  ped_produto.Pedidos_IdPedido = ? ; "); 

		return sql.toString();
	}


}
